(译)Kotlin 1.2 M2 is out

译者:黄志强&团子吃蛋挞
源地址:https://blog.jetbrains.com/kotlin/2017/08/kotlin-1-2-m2-is-out/

我们很高兴地公布Kotlin 1.2的第二个里程碑版本。该版本的重点在于Kotlin编译器和工具的稳定性与bug修复,以及Kotlin标准库的改进。此外还包含了很多即将发布的Kotlin 1.1.4所具备的工具特性。

如果能有您对新特性或者运行中所遇到的任何问题的反馈,我们将非常感谢。

从1.2 M1开始,完整的更新日志可以在这里查看,重要的变更在下面列出:

编译器

重大更改:Java默认方法调用

到目前为止,Kotlin的接口成员在jvm 1.6重写Java默认方法的时候,如果通过super调用父类方法,将会得到一个警告子类对Java默认方法的调用在JVM target 1.6已被弃用。请使用-jvm-target 1.8重新编译。在1.2-M2版本中,我们将警告变更为错误,因此此类代码将需要使用-jvm-target 1.8编译。

标准库

修正windowed/pairwise操作

我们听取了大家KEEP-11中关于chunked/windowed/pairwise函数的反馈,并且在1.2-M1里程碑版中发布了预览功能,在这基础上,我们还进行了如下改动:

  • windowed函数的自增变量现在默认为1。
    同时还增加了一个额外的可选参数partialWindows,用于控制不完整的窗口的结束处理流程。默认值为false,表示不完整的窗口不会保留。

  • pairwise函数名让人摸不着头脑,不知道它是如何配对元素的。所以我们新命名为zipWithNext,这更清楚地表明这函数会把集合中每个元素和下一个元素都压缩一次。

标准库中的通用数学运算

长期以来人们一直希望标准库KT-4900能够支持数学运算。但目前我们只能借助JVM平台上的java.lang.Math数学函数与常量,和JS平台上会把原生JS数学函数暴露给Kotlin的kotlin.js.Math

但现在我们在kotlin.math包中引入了下述几组API:

  • 常数:PIE
  • 三角函数:cossintan和反三角函数acosasinatanatan2
  • 双曲函数:coshsinhtanh
  • 幂函数:pow(扩展函数),sqrthypotexpexpm1
  • 对数函数:loglog2log10lnln1p
  • 取整函数:
    • ceilfloortruncateround(奇进偶取)函数;
    • roundToIntroundToLong(半整数)扩展函数;
  • 符号和绝对值:
    • abssign 函数;
    • absoluteValuesign扩展属性;
    • withSign扩展函数;
  • 比较两个值的maxmin函数;
  • 二进制表示法:
    • ulp扩展属性;
    • nextUpnextDownnextTowards扩展函数;
    • toBitstoRawBitsDouble.fromBits(都在kotlin包中)。

Float参数也可用相同的函数集(常数除外)。

上述函数大部分(二进制表示法除外)在JS也可以使用,因此两个平台可以通用一套计算代码。

预发行说明

与其他里程碑版本一样,对于新的语言和标准库特性,我们不会提供向后兼容的保证。1.2最终版之前,新引入的内容都尙处于更改之中。当我们最终RC时,预发行版本的所有二进制文件将被编译器认为不合法:您需要重新编译之前1.2-Mx编译的所有内容。

但是,使用1.1.x或更早的版本编译的代码则不需要重新编译也可以完美运行。

体验新版

在Maven / Gradle:添加http://dl.bintray.com/kotlin/kotlin-eap-1.2作为构建脚本和项目的库;然后把编译插件和标准库的版本号修改为1.2-M2

在IntelliJ IDEA:打开Tools → Kotlin → Configure Kotlin Plugin Updates,接着在Update channel下拉列表中选择”Early Access Preview 1.2”,然后点击Check for updates

命令行编译器可以从Github发布页面下载。

try.kotlinlang.org:在右下角的下拉列表将编译器版本更改为1.2-M2(即将开放)。